{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Cifar Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import os\n",
    "data_folder = os.path.join(os.path.expanduser(\"~\"), \"Data\", \"cifar-10-batches-py\")\n",
    "batch1_filename = os.path.join(data_folder, \"data_batch_1\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pickle\n",
    "# Bigfix thanks to: http://stackoverflow.com/questions/11305790/pickle-incompatability-of-numpy-arrays-between-python-2-and-3\n",
    "def unpickle(filename):\n",
    "    with open(filename, 'rb') as fo:\n",
    "        return pickle.load(fo, encoding='latin1')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch1 = unpickle(batch1_filename)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "image_index = 100\n",
    "image = batch1['data'][image_index]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "image = image.reshape((32,32, 3), order='F')\n",
    "import numpy as np\n",
    "image = np.rot90(image, -1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f12f47efac8>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f12f48b8b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(image)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Theano"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import theano\n",
    "from theano import tensor as T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "a = T.dscalar()\n",
    "b = T.dscalar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "c = T.sqrt(a ** 2 + b ** 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "f = theano.function([a,b], c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(5.0)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f(3, 4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Deep Neural Networks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "iris = load_iris()\n",
    "X = iris.data.astype(np.float32)\n",
    "y_true = iris.target.astype(np.int32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.cross_validation import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y_true, random_state=14)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import lasagne\n",
    "input_layer = lasagne.layers.InputLayer(shape=(10, X.shape[1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.4/dist-packages/Lasagne-0.1dev-py3.4.egg/lasagne/init.py:30: UserWarning: The uniform initializer no longer uses Glorot et al.'s approach to determine the bounds, but defaults to the range (-0.01, 0.01) instead. Please use the new GlorotUniform initializer to get the old behavior. GlorotUniform is now the default for all layers.\n",
      "  warnings.warn(\"The uniform initializer no longer uses Glorot et al.'s \"\n"
     ]
    }
   ],
   "source": [
    "hidden_layer = lasagne.layers.DenseLayer(input_layer, num_units=12, nonlinearity=lasagne.nonlinearities.sigmoid)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "output_layer = lasagne.layers.DenseLayer(hidden_layer, num_units=3, \n",
    "                                     nonlinearity=lasagne.nonlinearities.softmax)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import theano.tensor as T\n",
    "net_input = T.matrix('net_input')\n",
    "net_output = output_layer.get_output(net_input)\n",
    "true_output = T.ivector('true_output')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "loss = T.mean(T.nnet.categorical_crossentropy(net_output, true_output))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.4/dist-packages/Lasagne-0.1dev-py3.4.egg/lasagne/layers/helper.py:52: UserWarning: get_all_layers() has been changed to return layers in topological order. The former implementation is still available as get_all_layers_old(), but will be removed before the first release of Lasagne. To ignore this warning, use `warnings.filterwarnings('ignore', '.*topo.*')`.\n",
      "  warnings.warn(\"get_all_layers() has been changed to return layers in \"\n"
     ]
    }
   ],
   "source": [
    "all_params = lasagne.layers.get_all_params(output_layer)\n",
    "updates = lasagne.updates.sgd(loss, all_params, learning_rate=0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import theano\n",
    "train = theano.function([net_input, true_output], loss, updates=updates)\n",
    "get_output = theano.function([net_input], net_output)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "for n in range(1000):\n",
    "    train(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_output = get_output(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "y_pred = np.argmax(y_output, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import f1_score\n",
    "print(f1_score(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from PIL import Image, ImageDraw, ImageFont\n",
    "from skimage.transform import resize\n",
    "from skimage import transform as tf\n",
    "from skimage.measure import label, regionprops\n",
    "from sklearn.utils import check_random_state\n",
    "from sklearn.preprocessing import OneHotEncoder\n",
    "from sklearn.cross_validation import train_test_split\n",
    "\n",
    "def create_captcha(text, shear=0, size=(100, 24)):\n",
    "    im = Image.new(\"L\", size, \"black\")\n",
    "    draw = ImageDraw.Draw(im)\n",
    "    font = ImageFont.truetype(r\"Coval.otf\", 22)\n",
    "    draw.text((2, 2), text, fill=1, font=font)\n",
    "    image = np.array(im)\n",
    "    affine_tf = tf.AffineTransform(shear=shear)\n",
    "    image = tf.warp(image, affine_tf)\n",
    "    return image / image.max()\n",
    "\n",
    "\n",
    "def segment_image(image):\n",
    "    labeled_image = label(image > 0)\n",
    "    subimages = []\n",
    "    for region in regionprops(labeled_image):\n",
    "        start_x, start_y, end_x, end_y = region.bbox\n",
    "        subimages.append(image[start_x:end_x,start_y:end_y])\n",
    "    if len(subimages) == 0:\n",
    "        return [image,]\n",
    "    return subimages\n",
    "\n",
    "random_state = check_random_state(14)\n",
    "letters = list(\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\")\n",
    "shear_values = np.arange(0, 0.5, 0.05)\n",
    "\n",
    "def generate_sample(random_state=None):\n",
    "    random_state = check_random_state(random_state)\n",
    "    letter = random_state.choice(letters)\n",
    "    shear = random_state.choice(shear_values)\n",
    "    return create_captcha(letter, shear=shear, size=(20, 20)), letters.index(letter)\n",
    "dataset, targets = zip(*(generate_sample(random_state) for i in range(3000)))\n",
    "dataset = np.array(dataset, dtype='float')\n",
    "targets =  np.array(targets)\n",
    "\n",
    "onehot = OneHotEncoder()\n",
    "y = onehot.fit_transform(targets.reshape(targets.shape[0],1))\n",
    "y = y.todense().astype(np.float32)\n",
    "\n",
    "dataset = np.array([resize(segment_image(sample)[0], (20, 20)) for sample in dataset])\n",
    "X = dataset.reshape((dataset.shape[0], dataset.shape[1] * dataset.shape[2]))\n",
    "X = X / X.max()\n",
    "X = X.astype(np.float32)\n",
    "\n",
    "X_train, X_test, y_train, y_test = \\\n",
    "    train_test_split(X, y, train_size=0.9, random_state=14)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from lasagne import layers\n",
    "layers=[\n",
    "        ('input', layers.InputLayer),\n",
    "        ('hidden', layers.DenseLayer),\n",
    "        ('output', layers.DenseLayer),\n",
    "        ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from lasagne import updates\n",
    "from nolearn.lasagne import NeuralNet\n",
    "from lasagne.nonlinearities import sigmoid, softmax"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "net1 = NeuralNet(layers=layers,\n",
    "                 input_shape=X.shape,\n",
    "                 hidden_num_units=100,\n",
    "                 output_num_units=26,\n",
    "                 hidden_nonlinearity=sigmoid,\n",
    "                 output_nonlinearity=softmax,\n",
    "                 hidden_b=np.zeros((100,), dtype=np.float64),\n",
    "                 update=updates.momentum,\n",
    "                 update_learning_rate=0.9,\n",
    "                 update_momentum=0.1,\n",
    "                 regression=True,\n",
    "                 max_epochs=1000,\n",
    "                 )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "NeuralNet(X_tensor_type=<function matrix at 0x7f12ed0819d8>,\n",
       "     batch_iterator_test=<nolearn.lasagne.BatchIterator object at 0x7f12e5039c50>,\n",
       "     batch_iterator_train=<nolearn.lasagne.BatchIterator object at 0x7f12e5039c18>,\n",
       "     eval_size=0.2, hidden_b=array([ 0.,  0., ...,  0.,  0.]),\n",
       "     hidden_nonlinearity=<theano.tensor.elemwise.Elemwise object at 0x7f12ecd109e8>,\n",
       "     hidden_num_units=100, input_shape=(3000, 400),\n",
       "     layers=[('input', <class 'lasagne.layers.input.InputLayer'>), ('hidden', <class 'lasagne.layers.dense.DenseLayer'>), ('output', <class 'lasagne.layers.dense.DenseLayer'>)],\n",
       "     loss=None, max_epochs=1000, more_params={},\n",
       "     objective=<class 'lasagne.objectives.Objective'>,\n",
       "     objective_loss_function=<function mse at 0x7f12e8300598>,\n",
       "     on_epoch_finished=(), on_training_finished=(),\n",
       "     output_nonlinearity=<theano.tensor.nnet.nnet.Softmax object at 0x7f12ecd195c0>,\n",
       "     output_num_units=26, regression=True,\n",
       "     update=<function momentum at 0x7f12e8300ae8>,\n",
       "     update_learning_rate=0.9, update_momentum=0.1,\n",
       "     use_label_encoder=False, verbose=0,\n",
       "     y_tensor_type=TensorType(float32, matrix))"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "net1.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0\n"
     ]
    }
   ],
   "source": [
    "y_pred = net1.predict(X_test)\n",
    "y_pred = y_pred.argmax(axis=1)\n",
    "assert len(y_pred) == len(X_test)\n",
    "if len(y_test.shape) > 1:\n",
    "    y_test = y_test.argmax(axis=1)\n",
    "print(f1_score(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.4.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
